#include <iostream>
#include <map> 
#define se second
#define fi first

using namespace std;

map<pair<int, int>, bool> M;
const int N = 5e4 + 5;
int a[N];
pair<int, int> qp[N];
int b[N];
signed main() {
	ios::sync_with_stdio(false);
	//freopen("C:\\Users\\lenovo\\Desktop\\in.in", "r", stdin);
	int L, n, m;
	cin >> L >> n >> m;
	for (int i = n + 1; i; -- i) {
		qp[i].first = i - 1;
		qp[i].second = i + 1;
	}
	for (int i = 1; i <= n; ++ i) {
		cin >> a[i];
		M[{b[i] = a[i] - a[i - 1], i}] = true;
	}
	M[{b[n + 1] = L - a[n], n + 1}] = true;
	b[0] = b[n + 2] = 0x3f3f3f3f;
	int cnt = 0;
	for (auto i : M) {
		if (!i.se) continue;
		if (cnt == m) {
			cout << i.fi.fi;
			return 0;
		} else if (i.se) cnt ++;
		int num = i.fi.se, ans = i.fi.fi;
		if (b[qp[num].fi] > b[qp[num].se] || b[qp[num].se] == ans) {
			M[{b[qp[num].se], qp[num].se}] = false;
			M[{b[qp[num].se] += ans, qp[num].se}] = true;
			qp[qp[num].fi].se = qp[num].se;
			qp[qp[num].se].fi = qp[num].fi;
		} else {
			M[{b[qp[num].fi], qp[num].fi}] = false;
			M[{b[num] += b[qp[num].fi], num}] = true;
			qp[qp[qp[num].fi].fi].se = num;
			qp[num].fi = qp[qp[num].fi].fi;
		}
	}
	return 0;
}
